package com.ingenio.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ingenio.business.EstadoProveedor;
import com.ingenio.business.Localidad;
import com.ingenio.business.Producto;
import com.ingenio.business.Proveedor;
import com.ingenio.dao.EstadoProveedorAdapter;
import com.ingenio.dao.LocalidadAdapter;
import com.ingenio.dao.ProductoAdapter;
import com.ingenio.dao.ProveedorAdapter;

/**
 * Servlet implementation class ABMProveedoresServlet
 */
@WebServlet("/ABMProveedor")
public class ABMProveedoresServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ABMProveedoresServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String descripcion,calle,nroExterior,nroInterior,telefono,fax,email = "";
		Integer idLocalidad,idProveedor,idEstado = null;
		ProveedorAdapter pa = new ProveedorAdapter();
		Proveedor p = null;
		LocalidadAdapter la = new LocalidadAdapter();
		Localidad l = null;
		EstadoProveedorAdapter epa = new EstadoProveedorAdapter();
		EstadoProveedor ep = null;
		
		if("delete".equals(request.getParameter("type"))){
			try {
				Integer id = Integer.parseInt(request.getParameter("id"));
				p = pa.devolverProveedor(id);
				pa.eliminarProveedor(p);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else if("edit".equals(request.getParameter("type"))){
			if(request.getParameter("descripcion_proveedor") != null && request.getParameter("id_provin") != null &&
					request.getParameter("id_localidad") != null && request.getParameter("id_proveedor_hidden") != null && 
					request.getParameter("calle") != null && request.getParameter("nroExt") != null && 
					request.getParameter("telefono") != null){
				idProveedor = Integer.parseInt(request.getParameter("id_proveedor_hidden"));
				descripcion = request.getParameter("descripcion_proveedor");
				idLocalidad = Integer.parseInt(request.getParameter("id_localidad"));
				calle = request.getParameter("calle");
				nroExterior = request.getParameter("nroExt");
				nroInterior = request.getParameter("nroInt")!="" ? request.getParameter("nroInt") : null;
				telefono = request.getParameter("telefono")!="" ? request.getParameter("telefono") : null;
				fax = request.getParameter("fax");
				email = request.getParameter("email");
				idEstado = Integer.parseInt(request.getParameter("id_estado"));
				String idProds[] = request.getParameterValues("ProductoID");
				try {
					p = pa.devolverProveedor(idProveedor);
					l = la.devolverLocalidad(idLocalidad);
					ep = epa.devolverEstadoProveedor(idEstado);
					p.setDescProveedor(descripcion);
					p.setCalle(calle);
					p.setNroExterior(nroExterior);
					p.setNroInterior(nroInterior);
					p.setTelefono(telefono);
					p.setFax(fax);
					p.setEmail(email);
					p.setLocalidad(l);
					p.setEstadoProveedor(ep);
					
					//Recupera los productos asociados al proveedor
					ProductoAdapter proda = new ProductoAdapter();
					List<Producto> productos = new ArrayList<>();
					Producto prod = null;
					String idProd = null;
					if(idProds.length > 0){
						for(int i = 0;i < idProds.length-1; i++){
							idProd = idProds[i];
							prod = proda.devolverProducto(idProd);
							productos.add(prod);						
						}
					}
					pa.modificarProveedor(p,productos);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}else if("add".equals(request.getParameter("type"))){
			if(request.getParameter("descripcion_proveedor") != null && request.getParameter("id_provin") != null &&
					request.getParameter("id_localidad") != null && request.getParameter("calle") != null && 
					request.getParameter("nroExt") != null && request.getParameter("telefono") != null){
				descripcion = request.getParameter("descripcion_proveedor");
				idLocalidad = Integer.parseInt(request.getParameter("id_localidad"));
				calle = request.getParameter("calle");
				nroExterior = request.getParameter("nroExt");
				nroInterior = request.getParameter("nroInt");
				telefono = request.getParameter("telefono");
				fax = request.getParameter("fax");
				email = request.getParameter("email");
				String idProds[] = request.getParameterValues("ProductoID");
				try {
					l = la.devolverLocalidad(idLocalidad);
					
					//Recupera los productos asociados al proveedor
					ProductoAdapter proda = new ProductoAdapter();
					List<Producto> productos = new ArrayList<>();
					Producto prod = null;
					String idProd = null;
					if(idProds.length > 0){
						for(int i = 0;i < idProds.length-1; i++){
							idProd = idProds[i];
							prod = proda.devolverProducto(idProd);
							productos.add(prod);						
						}
					}
					p = new Proveedor(null, descripcion, null, l, calle, nroExterior, nroInterior, telefono, fax, email, true);
					pa.agregarProveedor(p,productos);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		response.sendRedirect("proveedores/listado_proveedor.jsp");
	}
}


